package br.com.edumobi.fragments;

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;

import br.com.edumobi.P;
import br.com.edumobi.R;
import br.com.edumobi.dados.modelos.Aluno;
import br.com.edumobi.dados.modelos.enuns.UF;
import br.com.edumobi.utils.Mask;

public class EnderecoAlunoFragment extends GenericoFragment {

    private TextView textViewLogradouroEnderecoAluno;
    private TextView textViewNumeroEnderecoAluno;
    private TextView textViewComplementoEnderecoAluno;
    private TextView textViewBairroEnderecoAluno;
    private TextView textViewCepEnderecoAluno;
    private TextView textViewCidadeEnderecoAluno;
    private TextView textViewUfsEnderecoAluno;
    private EditText editTextLogradouroEnderecoAluno;
    private EditText editTextNumeroEnderecoAluno;
    private EditText editTextComplementoEnderecoAluno;
    private EditText editTextBairroEnderecoAluno;
    private EditText editTextCepEnderecoAluno;
    private EditText editTextCidadeEnderecoAluno;
    private Spinner spinnerUfsEnderecoAluno;
    private Button buttonSalvarEnderecoAluno;
    private ProgressBar progressBarEnderecoAluno;

    private AcoesEnderecoAlunoFragment activity;
    private EnderecoAlunoTask task;

    private Aluno aluno;

    View.OnClickListener clickButtonSalvarEnderecoAluno = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String logradouro = editTextLogradouroEnderecoAluno.getText().toString();
            String numero = editTextNumeroEnderecoAluno.getText().toString();
            String complemento = editTextComplementoEnderecoAluno.getText().toString();
            String bairro = editTextBairroEnderecoAluno.getText().toString();
            String cep = editTextCepEnderecoAluno.getText().toString();
            String cidade = editTextCidadeEnderecoAluno.getText().toString();

            if (activity.isConnected()) {
                aluno.endereco.logradouro = logradouro;
                aluno.endereco.numero = numero;
                aluno.endereco.complemento = complemento;
                aluno.endereco.bairro = bairro;
                aluno.endereco.cep = cep;
                aluno.endereco.cidade.nome = cidade;
                aluno.endereco.cidade.uf = UF.getEnum((String) spinnerUfsEnderecoAluno.getSelectedItem());

                task = new EnderecoAlunoTask();
                task.execute();
            } else {
                activity.onSpeakAndMakeText(R.string.excecao_sem_conexao_internet);
            }
        }
    };

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        activity = (AcoesEnderecoAlunoFragment) getActivity();

        aluno = activity.getAluno();

        editTextLogradouroEnderecoAluno.setText(aluno.endereco != null ? aluno.endereco.logradouro : P.STRING_EMPITY);
        editTextNumeroEnderecoAluno.setText(aluno.endereco != null ? aluno.endereco.numero : P.STRING_EMPITY);
        editTextBairroEnderecoAluno.setText(aluno.endereco != null ? aluno.endereco.logradouro : P.STRING_EMPITY);
        editTextCepEnderecoAluno.setText(aluno.endereco != null ? aluno.endereco.cep : P.STRING_EMPITY);
        editTextCidadeEnderecoAluno.setText(aluno.endereco != null && aluno.endereco.cidade != null ? aluno.endereco.cidade.nome : P.STRING_EMPITY);
        spinnerUfsEnderecoAluno.setSelection(aluno.endereco != null && aluno.endereco.cidade != null && aluno.endereco.cidade.uf != null ? aluno.endereco.cidade.uf.id : 0);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_endereco_aluno, container, false);

        textViewLogradouroEnderecoAluno = (TextView) view.findViewById(R.id.textViewLogradouroEnderecoAluno);
        textViewNumeroEnderecoAluno = (TextView) view.findViewById(R.id.textViewNumeroEnderecoAluno);
        textViewComplementoEnderecoAluno = (TextView) view.findViewById(R.id.textViewComplementoEnderecoAluno);
        textViewBairroEnderecoAluno = (TextView) view.findViewById(R.id.textViewBairroEnderecoAluno);
        textViewCepEnderecoAluno = (TextView) view.findViewById(R.id.textViewCepEnderecoAluno);
        textViewCidadeEnderecoAluno = (TextView) view.findViewById(R.id.textViewCidadeEnderecoAluno);
        textViewUfsEnderecoAluno = (TextView) view.findViewById(R.id.textViewUfsEnderecoAluno);
        editTextLogradouroEnderecoAluno = (EditText) view.findViewById(R.id.editTextLogradouroEnderecoAluno);
        editTextNumeroEnderecoAluno = (EditText) view.findViewById(R.id.editTextNumeroEnderecoAluno);
        editTextComplementoEnderecoAluno = (EditText) view.findViewById(R.id.editTextComplementoEnderecoAluno);
        editTextBairroEnderecoAluno = (EditText) view.findViewById(R.id.editTextBairroEnderecoAluno);
        editTextCepEnderecoAluno = (EditText) view.findViewById(R.id.editTextCepEnderecoAluno);
        editTextCidadeEnderecoAluno = (EditText) view.findViewById(R.id.editTextCidadeEnderecoAluno);
        spinnerUfsEnderecoAluno = (Spinner) view.findViewById(R.id.spinnerUfsEnderecoAluno);
        buttonSalvarEnderecoAluno = (Button) view.findViewById(R.id.buttonSalvarEnderecoAluno);

        progressBarEnderecoAluno = (ProgressBar) view.findViewById(R.id.progressBarEnderecoAluno);
        editTextCepEnderecoAluno.addTextChangedListener(Mask.insert("#####-###", editTextCepEnderecoAluno));
        buttonSalvarEnderecoAluno.setOnClickListener(clickButtonSalvarEnderecoAluno);

        if (task != null && task.getStatus().equals(AsyncTask.Status.RUNNING)) {
            hideComponents();
            progressBarEnderecoAluno.setVisibility(View.VISIBLE);
        }
        return view;
    }

    @Override
    public void showComponents() {
        textViewLogradouroEnderecoAluno.setVisibility(View.VISIBLE);
        textViewNumeroEnderecoAluno.setVisibility(View.VISIBLE);
        textViewComplementoEnderecoAluno.setVisibility(View.VISIBLE);
        textViewBairroEnderecoAluno.setVisibility(View.VISIBLE);
        textViewCepEnderecoAluno.setVisibility(View.VISIBLE);
        textViewUfsEnderecoAluno.setVisibility(View.VISIBLE);
        textViewCidadeEnderecoAluno.setVisibility(View.VISIBLE);
        editTextLogradouroEnderecoAluno.setVisibility(View.VISIBLE);
        editTextNumeroEnderecoAluno.setVisibility(View.VISIBLE);
        editTextComplementoEnderecoAluno.setVisibility(View.VISIBLE);
        editTextBairroEnderecoAluno.setVisibility(View.VISIBLE);
        editTextCepEnderecoAluno.setVisibility(View.VISIBLE);
        editTextCidadeEnderecoAluno.setVisibility(View.VISIBLE);
        spinnerUfsEnderecoAluno.setVisibility(View.VISIBLE);
        buttonSalvarEnderecoAluno.setVisibility(View.VISIBLE);
        progressBarEnderecoAluno.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideComponents() {
        textViewLogradouroEnderecoAluno.setVisibility(View.GONE);
        textViewNumeroEnderecoAluno.setVisibility(View.GONE);
        textViewComplementoEnderecoAluno.setVisibility(View.GONE);
        textViewBairroEnderecoAluno.setVisibility(View.GONE);
        textViewCepEnderecoAluno.setVisibility(View.GONE);
        textViewUfsEnderecoAluno.setVisibility(View.GONE);
        textViewCidadeEnderecoAluno.setVisibility(View.GONE);
        editTextLogradouroEnderecoAluno.setVisibility(View.GONE);
        editTextNumeroEnderecoAluno.setVisibility(View.GONE);
        editTextComplementoEnderecoAluno.setVisibility(View.GONE);
        editTextBairroEnderecoAluno.setVisibility(View.GONE);
        editTextCepEnderecoAluno.setVisibility(View.GONE);
        editTextCidadeEnderecoAluno.setVisibility(View.GONE);
        spinnerUfsEnderecoAluno.setVisibility(View.GONE);
        buttonSalvarEnderecoAluno.setVisibility(View.GONE);
        progressBarEnderecoAluno.setVisibility(View.GONE);
    }

    private class EnderecoAlunoTask extends AsyncTask<Void, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            hideComponents();
            progressBarEnderecoAluno.setVisibility(View.VISIBLE);
            activity.onSpeak(R.string.aguarde);
        }

        @Override
        protected Boolean doInBackground(Void... params) {
            return activity.onSalvarDadosAluno(aluno);
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            showComponents();
            progressBarEnderecoAluno.setVisibility(View.GONE);

            if (aBoolean) {
                activity.onSpeakAndMakeText(R.string.dados_salvos_sucesso);
                activity.putPreferencesAluno(aluno);
            } else {
                activity.onSpeakAndMakeText(R.string.excecao_atualizacao_dados_aluno_malsucedida);
            }
        }
    }

    public interface AcoesEnderecoAlunoFragment extends AcoesGenericoFragment{
        Aluno getAluno();
        Boolean onSalvarDadosAluno(Aluno aluno);
    }
}
